package com.le.tester.book.effectivejava3rdchinese.secondReading.l33;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * createTime：2024-09-12 14:27
 * description：
 */
public class Favorites {

    private Map<Class<?>, Object> favorites = new HashMap<>();

    public <T> void putFavorites(Class<T> type, T instance) {
        favorites.put(Objects.requireNonNull(type), type.cast(instance));
    }

    public <T> T getFavorite(Class<T> type) {
        //用这种泛型最忌讳的就是需要这种强转，转换成了T。换句话来说，并不建议使用这种类型的强转，类型本身就变得不安全
        //这种强转的也一定表明了，在生产者和消费者中，消费者强转的值，一定是生产者使用的值
        return type.cast(favorites.get(type));
    }

    public static void main(String[] args) {
        Favorites f = new Favorites();
        f.putFavorites(String.class, "java");
        f.putFavorites(Integer.class, 0xcafebabe);
        f.putFavorites(Class.class, Favorites.class);

        String string = f.getFavorite(String.class);
        Integer integer = f.getFavorite(Integer.class);
        Class<?> aClass = f.getFavorite(Class.class);


    }
}
